<?php
// +----------------------------------------------------------------------
// | 微喜鹊 [ 广告主管理后台 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016 http://www.vxique.com All rights reserved.
// +----------------------------------------------------------------------
// | Author: ys <827396593@qq.com>
// +----------------------------------------------------------------------
namespace Admin\Model;

use Think\Model;

class AdminModel extends Model{

    /**
     * 自动验证
     */
    protected $_validate = array(
        //验证用户名
        //array('nickname', 'require', '昵称不能为空', self::MUST_VALIDATE, 'regex', self::MODEL_BOTH),

        //验证用户名
        array('username', 'require', '用户名不能为空', self::VALUE_VALIDATE, 'regex', self::MODEL_BOTH),
        array('username', '3,32', '用户名长度为1-32个字符', self::VALUE_VALIDATE, 'length', self::MODEL_BOTH),
        array('username', '', '用户名被占用', self::VALUE_VALIDATE, 'unique', self::MODEL_BOTH),
        array('username', '/^(?!_)(?!\d)(?!.*?_$)[\w]+$/', '用户名只可含有数字、字母、下划线且不以下划线开头结尾，不以数字开头！', self::VALUE_VALIDATE, 'regex', self::MODEL_BOTH),

        //验证密码
        array('password', 'require', '密码不能为空', self::MUST_VALIDATE, 'regex', self::MODEL_INSERT),
        array('password', '6,20', '密码长度为6-20位', self::MUST_VALIDATE, 'length', self::MODEL_INSERT),
        array('repassword', 'password', '两次输入的密码不一致', self::VALUE_VALIDATE, 'confirm', self::MODEL_INSERT),

        //验证邮箱
        array('email', 'email', '邮箱格式不正确', self::EXISTS_VALIDATE, 'regex', self::MODEL_BOTH),
        array('email', '1,32', '邮箱长度为1-32个字符', self::EXISTS_VALIDATE, 'length', self::MODEL_BOTH),
        array('email', '', '邮箱被占用', self::EXISTS_VALIDATE, 'unique', self::MODEL_BOTH),

        //验证手机号码
        array('tel', '/^1\d{10}$/', '手机号码格式不正确', self::EXISTS_VALIDATE, 'regex', self::MODEL_BOTH),
        array('tel', '', '手机号被占用', self::EXISTS_VALIDATE, 'unique', self::MODEL_BOTH),

        // 验证注册来源
        //array('reg_type', 'require', '注册来源不能为空', self::MUST_VALIDATE, 'regex', self::MODEL_INSERT),
    );
    /**
     * 后台用户登录
     * @param string $username 用户名
     * @param string $password 用户密码
     * @param array $map 查询条件
     * @return bool   返回查询结果
     */
    public function login($username,$password,$map=''){
        //去除前后空格
        $username = trim($username);

        //匹配登录方式
        if (preg_match("/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/", $username)) {
            $map['email'] = array('eq', $username); // 邮箱登陆
        } elseif (preg_match("/^1\d{10}$/", $username)) {
            $map['tel'] = array('eq', $username); // 手机号登陆
        } else {
            $map['username'] = array('eq', $username); // 用户名登陆
        }

        $map['status'] = array('eq', 1);
        $user_info     = $this->where($map)->find(); //查找用户

        if (!$user_info) {
            $this->error = '用户不存在或被禁用！';
        } else {
            if (md5($password) !== $user_info['password']) {
                $this->error = '密码错误！';
            } else {
                session('aid',$user_info['id']);
                return $user_info;
            }
        }
        return false;
    }

    /**
     * 设置登录状态
     * @author ys <827396593@qq.com>
     */
    public function auto_login($user)
    {
        // 记录登录SESSION和COOKIES
        $auth = array(
            'aid'      => $user['id'],
            'username' => $user['username'],
            'cn_name' => $user['cn_name'],
            'avatar'   => $user['avatar'],
        );
        session('user_auth', $auth);
        session('aid',$user['id']);
        session('user_auth_sign', $this->data_auth_sign($auth));
        return $this->is_login();
    }

    /**
     * 数据签名认证
     * @param  array  $data 被认证的数据
     * @return string       签名
     * @author ys <827396593@qq.com>
     */
    public function data_auth_sign($data)
    {
        // 数据类型检测
        if (!is_array($data)) {
            $data = (array) $data;
        }
        ksort($data); //排序
        $code = http_build_query($data); // url编码并生成query字符串
        $sign = sha1($code); // 生成签名
        return $sign;
    }

    /**
     * 检测用户是否登录
     * @return integer 0-未登录，大于0-当前登录用户ID
     * @author ys <827396593@qq.com>
     */
    public function is_login()
    {
        $user = session('user_auth');

        if (empty($user)) {
            return 0;
        } else {
            if (session('user_auth_sign') == $this->data_auth_sign($user)) {
                return $user['aid'];
            } else {
                return 0;
            }
        }
    }
}